/**
 * 本地Agent集成测试（在前端目录中运行）
 */

import { MastraClient } from '@mastra/client-js';

console.log('🚀 开始本地Agent集成测试...\n');

// 使用与前端相同的配置
const client = new MastraClient({
  baseUrl: 'http://localhost:4111',
  retries: 3,
  backoffMs: 300,
  maxBackoffMs: 5000,
});

console.log('🔧 客户端创建完成');
console.log('- client类型:', typeof client);
console.log('- client.agent类型:', typeof client.agent);

// 检查客户端结构
if (client.agent) {
  console.log('✅ agent属性存在');
  console.log('- agent.run方法:', typeof client.agent.run);
} else {
  console.log('❌ agent属性不存在');
  console.log('- 可用属性:', Object.keys(client));
}

async function testGameMasterAgent() {
  console.log('\n📋 测试游戏主控Agent...');
  
  try {
    if (!client.agent || !client.agent.run) {
      throw new Error('client.agent.run 方法不可用');
    }

    const result = await client.agent.run({
      agentId: 'gameMasterAgent',
      messages: [
        {
          role: 'user',
          content: `请开始一个新的赛博侦探游戏。

游戏配置：
- 难度：normal
- 主题：办公室谋杀案
- 嫌疑人数量：3

请使用 game-master 工具执行 start_game 操作。`
        }
      ]
    });

    console.log('   ✅ 游戏主控Agent响应成功！');
    console.log(`   📝 响应文本长度: ${result.text?.length || 0}`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    if (result.toolCalls && result.toolCalls.length > 0) {
      const toolResult = result.toolCalls[0].result;
      console.log(`   🎯 工具调用成功: ${toolResult?.success ? '是' : '否'}`);
    }
    
    return { success: true, result };
    
  } catch (error) {
    console.log('   ❌ 游戏主控Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    return { success: false, error: error.message };
  }
}

async function testSuspectDialogueAgent() {
  console.log('\n📋 测试嫌疑人对话Agent...');
  
  try {
    const result = await client.agent.run({
      agentId: 'suspectDialogueAgent',
      messages: [
        {
          role: 'user',
          content: `请模拟嫌疑人对话。

角色：李秘书（谨慎内向）
问题："你当时在哪里？"

请使用 dialogue-management 工具生成回应。`
        }
      ]
    });

    console.log('   ✅ 嫌疑人对话Agent响应成功！');
    console.log(`   📝 响应文本长度: ${result.text?.length || 0}`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    return { success: true, result };
    
  } catch (error) {
    console.log('   ❌ 嫌疑人对话Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    return { success: false, error: error.message };
  }
}

async function testInvestigationAgent() {
  console.log('\n📋 测试调查分析Agent...');
  
  try {
    const result = await client.agent.run({
      agentId: 'investigationAgent',
      messages: [
        {
          role: 'user',
          content: `请分析调查进度。

案件：办公室谋杀案
线索：现场咖啡杯
对话：1轮

请使用 clue-analysis 工具进行分析。`
        }
      ]
    });

    console.log('   ✅ 调查分析Agent响应成功！');
    console.log(`   📝 响应文本长度: ${result.text?.length || 0}`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    return { success: true, result };
    
  } catch (error) {
    console.log('   ❌ 调查分析Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    return { success: false, error: error.message };
  }
}

async function testEvaluationAgent() {
  console.log('\n📋 测试推理评估Agent...');
  
  try {
    const result = await client.agent.run({
      agentId: 'evaluationAgent',
      messages: [
        {
          role: 'user',
          content: `请评估推理结果。

推理：选择李秘书为真凶
证据：对话分析、现场线索
信心：75%

请使用 scoring 工具进行评估。`
        }
      ]
    });

    console.log('   ✅ 推理评估Agent响应成功！');
    console.log(`   📝 响应文本长度: ${result.text?.length || 0}`);
    console.log(`   🔧 工具调用数量: ${result.toolCalls?.length || 0}`);
    
    return { success: true, result };
    
  } catch (error) {
    console.log('   ❌ 推理评估Agent测试失败');
    console.log(`   📝 错误: ${error.message}`);
    return { success: false, error: error.message };
  }
}

async function runTests() {
  console.log('🎯 开始Agent集成测试...\n');
  
  const results = {
    gameMaster: await testGameMasterAgent(),
    suspectDialogue: await testSuspectDialogueAgent(),
    investigation: await testInvestigationAgent(),
    evaluation: await testEvaluationAgent(),
  };

  const successCount = Object.values(results).filter(r => r?.success).length;
  const totalTests = Object.keys(results).length;

  console.log('\n' + '='.repeat(50));
  console.log('📊 测试结果报告');
  console.log('='.repeat(50));
  console.log(`🎯 成功率: ${successCount}/${totalTests} (${Math.round(successCount/totalTests*100)}%)`);
  console.log(`🤖 游戏主控Agent: ${results.gameMaster?.success ? '✅' : '❌'}`);
  console.log(`💬 嫌疑人对话Agent: ${results.suspectDialogue?.success ? '✅' : '❌'}`);
  console.log(`🔍 调查分析Agent: ${results.investigation?.success ? '✅' : '❌'}`);
  console.log(`📊 推理评估Agent: ${results.evaluation?.success ? '✅' : '❌'}`);

  if (successCount === totalTests) {
    console.log('\n🎉 所有Agent测试通过！API调用问题已解决！');
  } else if (successCount > 0) {
    console.log('\n👍 部分Agent正常，继续调试其他Agent');
  } else {
    console.log('\n⚠️  需要进一步调试Agent调用');
  }

  return results;
}

runTests().catch(error => {
  console.error('❌ 测试失败:', error);
  process.exit(1);
});
